/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package miselania.Almacenamiento;
import java.io.*;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
/**
 *
 * @author jhon
 */
public class Catalogo {
     /** nombre de archivo del catalogo*/
    private String archivoCatalogo;
    
    
    /** entradas del catalogo,mapean nombres de tabla a entradas*/
    private Map<String,EntradaCatalogo> entradas;
   
    /**numero de tablas que actualmente estan almacenados en el catalogo*/
    private int numeroDeTablas;
    
    //-----------------------------------------------
    public Catalogo(String ArchivoCtalogo){
        this.archivoCatalogo=ArchivoCtalogo;
        entradas=new Hashtable<String,EntradaCatalogo>();
    }
    //-----------------------------------------------

    public String getArchivoCatalogo() {
        return archivoCatalogo;
    }
//---------------------------------------------------
    public int getNumeroDeTablas() {
        return numeroDeTablas;
    }
    
    
    //------------------------------------------------

    public Map<String, EntradaCatalogo> getEntradas() {
        return entradas;
    }
    
    
    
    
    //-----------------------------------------------
    
    
    
    public void CrearNuevaEntrada(EntradaCatalogo entrada) throws IllegalArgumentException{
        if(!existeTabla(entrada.getNombreTabla())){
            entradas.put(entrada.getNombreTabla(), entrada);
            numeroDeTablas++;
        }else{
            throw  new IllegalArgumentException("Tabla: "+entrada.getNombreTabla()+" ya existe.");
        }
    }
    
    //-----------------------------------------------
    //-----------------------------------------------
    protected boolean existeTabla(String nombreTabla){
        return (entradas.get(nombreTabla)!=null);
    }
    
    //-----------------------------------------------
    //-----------------------------------------------
    @Override
    public  String toString(){
        return "Catalogo : "+numeroDeTablas+" tablas.  Entradas : \n"+"\t"+entradas.toString();
    }
    //------------------------------------------------------------------
    //------------------------------------------------------------------
    //------------------------------------------------------------------
     public void EliminarEntradaCatalogo(EntradaCatalogo E1){
        //Buscamos en el Map el nombre de la tabla
        if (existeTabla(E1.getNombreTabla())) {
            entradas.remove(E1.getNombreTabla());
            numeroDeTablas=numeroDeTablas-1;
        }
        else
        {
            System.out.println("No existe la tabla");
        }
         System.out.println("Entrada de Catalogo Eliminada");
     }
     //----------------------------------------------------------------
     //implemente un metodo ActulizarAtributo en la clase relacion
     //del cual hereda la clase tabla
     public void ActualizarEntrada(EntradaCatalogo E1, Atributo A,int i){
        if (existeTabla(E1.getNombreTabla())) {
            Tabla T = E1.getTabla();
            T.ActulizarAtributo(A, i);            
        }
        else
        {
            System.out.println("No existe el atrbuto");   
        }
     }
}
